# 商品频道类目的测试用例
import unittest
import ddt
from common.functions import browser_operation
from page.reception.index_page import IndexPage
from page.reception.goods.category_page import CategoryPage
from page.reception.goods.goods_page import GoodsPage

# 频道数据
driver = browser_operation()
index = IndexPage(driver)
index.get_website(index.index_url)
channel = index.category_url_list()  # 频道地址列表


@ddt.ddt  # 数据驱动
class GoodsListTestCase(unittest.TestCase):
    @classmethod  # 大夹子
    def setUpClass(cls) -> None:
        cls.category = CategoryPage(driver)
        cls.goods = GoodsPage(driver)

    @ddt.data(*channel)
    def test_channel(self, channel_url):
        # 数据驱动依次请求频道网址
        index.get_website(channel_url)
        # 获取当前频道商品总数量的值
        goods_total = self.category.get_goods_total_text()
        # 将商品总数的值转换为整数型
        if int(goods_total):  # 值大于0为真, 才执行代码块
            # 获取当前类目里所有商品的title标题
            goods_titles = self.category.get_goods_title()
            # 通过商品标题title来定位商品, 执行点击
            # 遍历出每个商品的title
            for title in goods_titles:
                # 定位并点击
                self.category.click_goods(title)
                # 点击了商品进入商品详情, 获取商品详情页里的商品名称
                goods_title = self.goods.get_goods_title_text()
                # 断言点击前的title(去掉前后的空格)与点击后的商品详情页里的goods_title相同
                self.assertEqual(title.strip(), goods_title)
                # 断言后,后退到上一页循环点击剩下的商品
                self.goods.retreat()

    @classmethod
    def tearDownClass(cls) -> None:  # 大夹子
        # 退出浏览器
        cls.goods.quit()


if __name__ == '__main__':
    unittest.main(verbosity=2)
